home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / library / extend / cookie.s < prev    next >
Text File  |  1998-07-25  |  2KB  |  100 lines

  1.  
  2. ;------------------------------------------------------------------------------
  3. ; Method name : -
  4. ; Asm label   : GWVA_COOKIE_SEARCH_ONE_COOKIE
  5. ; Description : Fonction de recherche d'un cookie
  6. ;
  7. ; Rq  : Fonction à exécuter en superviseur (SUPEXEC)
  8. ;
  9. ; in  : GWVA_ROOT_SEARCH_IN_OUT.l = cookie à rechercher ('_CPU')
  10. ; out : GWVA_ROOT_SEARCH_IN_OUT.l =    ptr sur le mot long après la chaine 
  11. ;            donnée comme recherche ou 0.l si pas trouvé
  12. ;
  13. ; 11/01/98 : Création
  14. ;------------------------------------------------------------------------------
  15. GWVA_COOKIE_SEARCH_ONE_COOKIE:
  16.     move.l GWVA_ROOT_SEARCH_IN_OUT,d0
  17.     clr.l GWVA_ROOT_SEARCH_IN_OUT
  18.  
  19.     move.l _p_cookies.w,a0
  20.     cmp.l #0,a0
  21.     beq.s .no_cookie
  22.  
  23. .next:    tst.l (a0)
  24.     beq.s .end_list
  25.  
  26.     cmp.l (a0),d0
  27.     beq.s .found
  28.  
  29.     lea 8(a0),a0
  30.     bra.s .next
  31.  
  32. .found:    lea 4(a0),a0
  33.     move.l a0,GWVA_ROOT_SEARCH_IN_OUT
  34. .end_list:
  35. .no_cookie:
  36.     rts
  37.  
  38.     ifd LIB_INSTALL_COOKIE
  39. ;------------------------------------------------------------------------------
  40. ; Method name : -
  41. ; Asm label   : GWVA_COOKIE_INSTALL_ONE_COOKIE
  42. ; Description : Fonction pour installer un cookie
  43. ;
  44. ; Rq  : Fonction à exécuter en superviseur (SUPEXEC).
  45. ; Rq  : A chaque implantation d'un nouveau cookie, on fait un malloc et on recopie
  46. ; Rq  : tout le cookie-jar dedans, plus le notre.
  47. ;
  48. ; in  : GWVA_ROOT_SEARCH_IN_OUT.l = cookie à installer ('_CPU')
  49. ; in  : GWVA_ROOT_SEARCH_IN_OUT.l+4 = mot long à mettre pour le cookie
  50. ; out : GWVA_ROOT_SEARCH_IN_OUT.l =    adresse d'implantation ou 0.l si échoué
  51. ;
  52. ; 16/05/98 : Création
  53. ;------------------------------------------------------------------------------
  54. GWVA_COOKIE_INSTALL_ONE_COOKIE:
  55.  
  56.     move.l $5a0.w,a0
  57.     cmp.l #0,a0
  58.     beq.s .no_cookie
  59.  
  60.     move.l a0,a1
  61.  
  62. .find_next:    tst.l (a1)
  63.     beq.s .found_last
  64.     lea 8(a1),a1
  65.     bra.s .find_next
  66.  
  67. .found_last:move.l a1,d0
  68.     sub.l a0,d0        ; d0 =place à réserver
  69.     add.l #8+4,d0
  70.  
  71.     save.l d0/a0
  72.     MXALLOC #MX_PREFTTRAM,d0
  73.     load.l d1/a0
  74.  
  75.     tst.l d0
  76.     beq.s .erreur_malloc
  77.  
  78.     move.l d0,$5a0.w
  79.  
  80.     move.l d0,a1
  81.     sub.l #2*4+4,d1
  82.  
  83. .copy_old_cookies:
  84.     subq.l #4,d1
  85.     bmi.s .end_copy
  86.     move.l (a0)+,(a1)+
  87.     bra.s .copy_old_cookies
  88.  
  89. .end_copy:    move.l GWVA_ROOT_SEARCH_IN_OUT,(a1)
  90.     move.l GWVA_ROOT_SEARCH_IN_OUT+4,4(a1)
  91.     clr.l 8(a1)
  92.     move.l a1,GWVA_ROOT_SEARCH_IN_OUT
  93.     rts
  94.  
  95. .erreur_malloc:
  96. .no_cookie:    clr.l GWVA_ROOT_SEARCH_IN_OUT
  97.     rts
  98.  
  99.     endc    ; ifd LIB_INSTALL_COOKIE
  100.